home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-20 / pmpsrc11.zip / PMP.H < prev    next >
Text File  |  1991-07-30  |  12KB  |  363 lines

  1. /*
  2.     PMP.H -- Main header file
  3.  
  4.   Poor Man's Packet (PMP)
  5.   Copyright (c) 1991 by Andrew C. Payne    All Rights Reserved.
  6.  
  7.   Permission to use, copy, modify, and distribute this software and its
  8.   documentation without fee for NON-COMMERCIAL AMATEUR RADIO USE ONLY is hereby
  9.   granted, provided that the above copyright notice appear in all copies.
  10.   The author makes no representations about the suitability of this software
  11.   for any purpose.  It is provided "as is" without express or implied warranty.
  12.  
  13.     Andrew C. Payne
  14.     August, 1989
  15. */
  16.  
  17. #include "types.h"
  18. #include "dqueue.h"
  19.  
  20. /* ----- Defines ----- */
  21. #define NETROM            /* include Net/Rom code */
  22. /* #define    TRACE             include trace/log code */
  23. #define DEBUG            /* include debug code */
  24.  
  25. #define REMOTE            /* include remote commands */
  26. #define VERSION    "1.1"        /* PMP Version Number */
  27.  
  28. #define TRUE    1
  29. #define FALSE    0
  30. #define FAIL    -1
  31.  
  32. #define MAXDIGIS    7    /* max digipeaters in path */
  33. #define MAXCLEN        6    /* # of characters in callsign */
  34.  
  35. #define malloc(x)    farmalloc(x)
  36.  
  37. /* ----- Screen colors ----- */
  38. #define normal()    (textattr(NormalAttr))
  39. #define bright()    (textattr(BrightAttr))
  40. #define inverse()    (textattr(InvAttr))
  41.  
  42. /* ----- Timing Stuff ----- */
  43.  
  44. #define    BITTIME        1988    /* 1200 baud bit time in Counter #0 ticks */
  45. #define MILLISEC    1193    /* 1 millisecond */
  46. #define BITSPERTICK    66    /* 66 bits per BIOS tick */
  47.  
  48. /* ----- BIOS Time Stuff ----- */
  49. #define BiosTime()    ((long)biostime(0,0))    /* reads the bios timer */
  50. #define BIOSSEC        18            /* tics per second */
  51.  
  52. /* ----- Control field stuff ----- */
  53. #define I    0x00        /* Information */
  54. #define S    0x01        /* Supervisory */
  55. #define RR    0x01        /* Receiver ready */
  56. #define RNR    0x05        /* Receiver not ready */
  57. #define REJ    0x09        /* Reject */
  58. #define U    0x03        /* unnumbered frames */
  59. #define SABM    0x2f        /* Connect request */
  60. #define DISC    0x43        /* Disconnect */
  61. #define DM    0x0f        /* disconnected mode */
  62. #define UA    0x63        /* unnumbered acknowledge */
  63. #define FRMR    0x87        /* frame reject */
  64. #define UI    0x03        /* unnumbered information */
  65. #define    PF    0x10        /* poll/final bit */
  66.  
  67. /* ----- Command bit ----- */
  68. #define UNKNOWN    0        /* pre-AX.25 level 2 */
  69. #define COMMAND    1
  70. #define RESPONSE 2
  71.  
  72. /* ----- Bit masks ----- */
  73. #define    SSIDMASK    0x1e    /* mask for SSID nibble */
  74. #define REPEATED    0x80    /* has been repeated bit */
  75.  
  76. /* ----- AX.25 Level 3 Protocol ID bytes ----- */
  77. #define PID_NETROM    0xcf        /* NET/ROM */
  78. #define PID_TEXT    0xf0        /* no Level 3 */
  79.  
  80. /* ----- Global Structures ----- */
  81. struct ax25_level1 {        /* Level 1 packet */
  82.     int    len;        /* number of bytes */
  83.     byte    data[1];    /* zero or more data bytes */
  84. };
  85.  
  86. struct ax25_addr {        /* AX.25 address */
  87.     byte    call[MAXCLEN];    /* Callsign, shifted left one bit */
  88.     byte    ssid;        /* sub-station ID field */
  89. };
  90.  
  91. struct ax25_packet {        /* Internal representation of packets */
  92.     struct ax25_addr    dest;        /* destination */
  93.     struct ax25_addr    source;        /* source */
  94.     struct ax25_addr    digis[MAXDIGIS];
  95.     char            repeated[MAXDIGIS];  /* has been repeated */
  96.     int            ndigis;
  97.     byte            cmdresp;    /* command/response bit */
  98.     byte            cont;        /* control byte */
  99.     byte            pid;        /* protocol ID */
  100.     int            dlen;        /* data length */
  101.     byte            data[1];    /* data bytes */
  102. };
  103.  
  104. struct ax25_con    {        /* link control block */
  105.     struct ax25_packet    header;        /* default packet */
  106.     int            state;        /* state of this link */
  107.     int            vs;        /* send sequence */
  108.     int            vr;        /* receive sequence */
  109.     int            tqs;        /* transmit queue seq */
  110.     long            t1;        /* T1 Timeout */
  111.     long            t2;        /* T2 Timeout */
  112.     long            t3;        /* T3 Timeout */
  113.     int            unack;        /* # of unacked packets */
  114.     int            qsize;        /* # of packets in queue */
  115.     byte            response;    /* enqueued response */
  116.     byte            dreason;    /* reason for disconnect */
  117.     byte            proto;        /* protocol version */
  118.     int            retries;    /* current number of retries */
  119.     int            remotebusy;    /* TRUE of got RNR */
  120.     DQUEUE            dq;        /* outgoing data queue */
  121.     char            type;        /* lins type (binary, text) */
  122. };
  123.  
  124. struct param_cmd {        /* command dispatch table */
  125.     char    *cmd;            /* command */
  126.     int    (*handler)(char *s);    /* parameter line */
  127. };
  128.  
  129. /* ----- Connection States ----- */
  130. #define    DISCONNECTED    0    /* disconnected mode */
  131. #define SETUP        1    /* link setup */
  132. #define    DISCONNECTPEND    2    /* pending disconnect */
  133. #define CONNECTED    3    /* link connected */
  134. #define RECOVERY    4    /* link recovery */
  135.  
  136. /* ----- Protocol Versions ----- */
  137. #define V1    1
  138. #define V2    2
  139.  
  140. /* ----- Disconnect Reasons ----- */
  141.  
  142. #define DISC_LOCAL    1    /* local initiated, normal disconnect */
  143. #define DISC_REMOTE    2    /* remote initiated, normal disconnect */
  144. #define DISC_TIMEOUT    3    /* excessive retries */
  145. #define DISC_BUSY    4    /* remote busy (attempted connect) */
  146.  
  147. /* ----- Line Termination Conventions ----- */
  148. #define EOL_CR        1    /* lines terminate with CR */
  149. #define EOL_LF        2    /* lines terminate with LF */
  150. #define EOL_CRLF    3    /* lines terminate with CR/LF */
  151.  
  152. /* ----- Link Types ------ */
  153. #define BINARY        1    /* binary stream */
  154. #define TEXT        2    /* text stream */
  155.  
  156. /* ----- Global Variables ----- */
  157.  
  158. #ifndef EXTERN
  159. #define EXTERN extern
  160. #endif
  161.  
  162. #define MAXCTEXTS 5            /* maximum CTEXT lines */
  163. EXTERN int    CallLength;        /* length of callsign string */
  164.  
  165. /* ----- Timing Parameters ----- */
  166. EXTERN int    TXStartFlags;        /* number of opening SYNCs on each TX */
  167. EXTERN int    TXEndFlags;        /* number of SYNCS at end of packet*/
  168. EXTERN int    Frack;            /* timeout (seconds) */
  169. EXTERN int    Check;            /* keep-alive (seconds) */
  170. EXTERN int    BeaconInt;        /* beacon interval (seconds) */
  171. EXTERN int    Ppersist;        /* p-persistence parameter */
  172. EXTERN int    Slottime;        /* slot wait time */
  173. EXTERN long    Pwait;            /* P-persist timeout */
  174.  
  175. EXTERN int    Retry;            /* maximum number of retries */
  176.  
  177. EXTERN struct ax25_addr MyCall;        /* user's callsign */
  178. EXTERN struct ax25_con    AX25_Control;
  179.  
  180. EXTERN long    SoundEnd;        /* ending time of a sound */
  181. EXTERN long    BeaconEnd;        /* time for next beacon */
  182. EXTERN long    Pwait;            /* P-persist timeout */
  183.  
  184. /* ----- User Parameters ----- */
  185. EXTERN int    DebugMode;        /* TRUE if in debug mode */
  186. EXTERN int    PassMode;        /* TRUE if in PassAll mode */
  187. EXTERN int     Sound;            /* TRUE if sound is enabled */
  188.  
  189. EXTERN int    Pthresh;        /* I-frame threshhold */
  190. EXTERN char    *ctext[MAXCTEXTS];    /* connect message lines */
  191. EXTERN int    nctexts;        /* number of CTEXT lines */
  192. EXTERN char    *btext;            /* beacon/CQ message */
  193. EXTERN char    *baddr;            /* destination/path of beacons */
  194. EXTERN int    MaxFrame;        /* max outstanding frames */
  195. EXTERN int    Paclen;            /* max packet size */
  196. EXTERN int    Ppersist;        /* p-persistence parameter */
  197. EXTERN int    Slottime;        /* slot wait time */
  198.  
  199. EXTERN int    AutoWrap;        /* word wrap column */
  200.  
  201. EXTERN char    CaptureFile[40];    /* current capture filename */
  202. EXTERN long    CaptureSize;        /* bytes in current capture file */
  203. EXTERN long    CaptureBuffer;        /* size of capture buffer */
  204.  
  205. EXTERN KEY    fkeys[10][80];        /* function key definitions */
  206. EXTERN char    ParamFname[40];        /* parameter file name */
  207. EXTERN int    AutoMode;        /* automatic mode */
  208. EXTERN int    ClockSkew;        /* attempt clock adjust */
  209.  
  210. /* ----- Counters ----- */
  211. EXTERN long    RXCount;        /* number of good frames received */
  212. EXTERN long    RXQOverflow;        /* number of RX Queue overflows */
  213. EXTERN long    RXBOverflow;        /* number of RX Buffer overflows */
  214. EXTERN long    RXFrameErr;        /* number of framing errors received */
  215. EXTERN long    RXCRCErr;        /* number of CRC error received */
  216. EXTERN long    RXFRMR;            /* number of FRMR frames received */
  217. EXTERN long    RXREJ;            /* number of REJ frames received */
  218. EXTERN long    TXCount;        /* number of frames transmitted */
  219. EXTERN long    StartTime;        /* startup time */
  220.  
  221. /* ----- Screen Parameters ----- */
  222. EXTERN int    monochrome;        /* TRUE if monochrome screen */
  223. EXTERN int    NormalAttr;        /* normal attribute */
  224. EXTERN int    InvAttr;        /* inverse attrubute */
  225. EXTERN int    BrightAttr;        /* bright attribute */
  226. EXTERN int    StatusAttr;        /* status line attribute */
  227. EXTERN int    MsgAttr;        /* message attribute */
  228.  
  229. /* ----- Function Prototypes ----- */
  230.  
  231. /* ax25dump.c */
  232. extern void ShowLevel2(struct ax25_packet *p2);
  233. extern char *DumpLevel2(struct ax25_packet *p2);
  234.  
  235. /* ax25lapb.c */
  236. extern int Connected(void);
  237. extern void AX25_Init(void);
  238. extern void AX25_Flush(void);
  239. extern void AX25_Incoming(struct ax25_packet *p2);
  240. extern void AX25_Open(void);
  241. extern void AX25_Close(void);
  242. extern void AX25_Expire(int n);
  243. extern int LinkSend(byte *p, int l);
  244. extern int AX25QFull(void);
  245.  
  246. /* ax25subr.c */
  247. extern int SetAX25Addr(struct ax25_addr *a, char *s);
  248. extern char *GetAX25Addr(struct ax25_addr *p);
  249. extern int CompAX25Addr(struct ax25_addr *a1, struct ax25_addr *a2);
  250. extern int FrameType(byte c);
  251. extern int CmdResp(struct ax25_level1 *p);
  252. extern int SetAX25Path(char *s, struct ax25_packet *a);
  253. extern char *GetAX25Path(struct ax25_packet *p);
  254. extern struct ax25_packet *AX25L1toL2(struct ax25_level1 *p);
  255. extern int SendAX25(struct ax25_packet *p);
  256. extern void ReversePath(struct ax25_packet *p1, struct ax25_packet *p2);
  257. extern void SendBeacon(void);
  258. extern void StartBeacon(void);
  259. extern void SendWelcome(void);
  260.  
  261. /* capture.c */
  262. extern void InitCapture(void);
  263. extern void FlushCapture(void);
  264. extern void Capture(char *s, int len);
  265. extern void OpenCapture(char *fname);
  266. extern void CloseCapture(void);
  267. extern int Capturing(void);
  268.  
  269. /* console.c */
  270. extern void curon(void);
  271. extern void curoff(void);
  272. extern int cursave(void);
  273. extern void currest(int i);
  274. extern void putstring(int x, int y, int len, byte attr, char *s);
  275. extern void clear_area(int line, int start, int end);
  276. extern void CRTInit(void);
  277. extern void CRTExit(void);
  278. extern int StartScrollback(void);
  279. extern void EndScrollback(void);
  280. extern int MoveScrollback(int n);
  281. extern void WriteScrollback(char *fname);
  282. extern void GotoLeft(void);
  283. extern void ShowData(byte *s, int l);
  284. extern void uprintf(byte attr, char *format, ...);
  285. extern void uputs(byte attr, char *s);
  286. extern void _uputs(byte attr, char *s);
  287. extern void uputtext(byte attr, byte *s, int l);
  288. extern void SaveScreen(int f, int border);
  289. extern void RestoreScreen(void);
  290. extern void CenterTitle(int line, char *t);
  291. extern void GotoXY(int x, int y);
  292. extern void StatusLine(void);
  293. extern void ShowTXRX(int tx, int rx);
  294. extern void NotifyStatus(int old, int new);
  295. extern void Pause(int delay);
  296. extern void Notify(char *s);
  297. extern void SaveMessage(void);
  298. extern void RestoreMessage(void);
  299. extern int GetInput(char *prompt, char *s, int len);
  300.  
  301. /* heard.c */
  302. extern void HeardInit(void);
  303. extern void Heard(struct ax25_packet *p);
  304. extern void DoHeard(void);
  305.  
  306. /* keys.c */
  307. extern KEY Nextkey(void);
  308. extern void AddKeystrokes(KEY *s);
  309. extern void InitKeybuffer(void);
  310. extern int convertkey(KEY *dest, char *src);
  311.  
  312. /* level1rx.c */
  313. extern int RXCarrier(void);
  314. extern int RXLevel1(void);
  315. extern void RXProcess(void);
  316. extern void RXInit(void);
  317.  
  318. /* level2rx.c */
  319. extern void AX25Level2(struct ax25_level1 *p);
  320.  
  321. /* level1tx.c */
  322. extern void ClockAdjust(int bitcount);
  323. extern void TXKey(int state);
  324. extern int CRCCheck(struct ax25_level1 *p);
  325. extern void TXQInit(void);
  326. extern int TXQAdd(struct ax25_level1 *packet);
  327. extern void TXQEmpty(void);
  328. extern int TXQBytesInQ(void);
  329.  
  330. /* level2tx.c */
  331. extern int SendAX25(struct ax25_packet *p);
  332.  
  333. /* misc.c */
  334. extern char *sob(char *s);
  335. extern char *extract(char *s, char *p);
  336. extern int convert(char *dest, char *src);
  337. extern int dispatch(char *s, struct param_cmd *pcmds);
  338. extern void trim(char *s);
  339. extern void eol_out(int conv, char *src, int len);
  340. extern void eol_in(int conv, char *src, int len);
  341.  
  342. /* param.c */
  343. extern void InitParameters(void);
  344. extern int ReadParameters(void);
  345. extern char *extract(char *s, char *p);
  346.  
  347. /* pmp.c */
  348. extern void PeriodicHook(void);
  349. extern void StartSound(int freq, int len);
  350. extern void Pause(int delay);
  351. extern void OutOfMemory(void);
  352.  
  353. /* trace.c */
  354. extern void LogInit(void);
  355. extern void LogPacket(struct ax25_level1 *p, int dir);
  356. extern void DumpLog(void);
  357.  
  358. #ifdef REMOTE
  359. /* remote.c */
  360. extern void command(char *s);
  361. #endif
  362.  
  363.